home *** CD-ROM | disk | FTP | other *** search
/ MIDICraft's MIDINET CD-ROM / MIDICraft's MIDINET CD-ROM.iso / MIDTOOLS / MIDICAT1.DOC < prev    next >
Text File  |  1997-05-10  |  15KB  |  359 lines

  1.             MidiCat v1.0 Copyright 1994 Ron Dippold - Quick Docs
  2.                             All Rights Reserved
  3.  
  4. INFO BLURB
  5.  
  6. MidiCat looks through your MIDI files and summarizes the important
  7. information in a one-line-per-file mode for cataloging or a more verbose
  8. informational mode.   It also tracks General MIDI Instrument and Drum usage
  9. within the file for analysis.
  10.  
  11. PC only, runs under DOS.  This is 100% free software.  The only requirement
  12. is that you must distribute the executable only along with this
  13. documentation.
  14.  
  15. If you're going to distribute this as part of a package or like/use the
  16. program, please let me know at rdippold@qualcomm.com.  I'm not going to ask
  17. for money, I'd just like to know.  If I think there's enough interest, I'll
  18. update this to handle Cakewalk .WRK files and make some other improvements.
  19.  
  20.  
  21.  
  22. I. INTRODUCTION
  23.  
  24. The entire purpose of this program is to look at a MIDI file and give you a
  25. quick "dump" of the important contents.   I looked all over the Internet
  26. for such a program for the purposes of managing my collection, and didn't
  27. find one, so, being a programmer, I grabbed the MIDI spec and wrote one.
  28.  
  29. MidiCat Operates in two modes - single line and informational modes.  By
  30. default, single line mode is used: each MIDI file processed is reduced to a
  31. single line of information.   If you specify additional data to be shown,
  32. then the single line of info is still shown, but the additional data
  33. follows.  Typically, you might use the single line mode to produce a
  34. catalog of a whole directory of MIDI files, and the informational modes
  35. when you're looking at an individual file, for instance prior to playing
  36. it.
  37.  
  38. Once you've got your list of files, then you can use a good text editor
  39. like QEdit or Sprint to massage your "database."
  40.  
  41. Note: MidiCat doesn't recognize Cakewalk WRK files, but I'm working on
  42. getting the specs...
  43.  
  44. If you have more information or suggestions, feel free to email them to
  45. rdippold@qualcomm.com (Internet).
  46.  
  47.  
  48.  
  49. II. SINGLE LINE MODE
  50.  
  51. Single line usage is easy:
  52.  
  53.         midicat <filename> ( <filename> <filename> ... )
  54.  
  55. <filename> can be the name of a MIDI file, or can include wildcards.  You
  56. can specify multiple filenames with wildcards, so you could do
  57.  
  58.         midicat my.mid c:\midi\*.mid d:\mididata\*.mmf
  59.  
  60. midicat doesn't assume anything about extensions - no ".mid" is implied.
  61.  
  62. You'll get something like this:
  63.  
  64. Filename                     Size F #T  Time Midi Name
  65. ----------------------------------------------------------------------------
  66. ACKER-GS MID               42,355 1 22  4:43 
  67. ADAGIO   MID               17,180 1 10  3:47 WinJammer Demo
  68. ADAMSFAM MID                2,141 1  6  0:52 
  69. ADDCTDGS MID               42,315 1 21  3:51 
  70. AGENTMAN MID               42,874 1 33  3:23 
  71. ALLATRCA MID               17,563 1  5  4:27 Alla Turca - Wolfgang A Mozart
  72. ALMONDS  MID               49,889 0  1  1:56 
  73. ALNITLNG MID               28,160 -  0  1:56 ** unknown type
  74. ANCHOR   MID                6,591 0  1  1:36 Anchors Aweigh
  75. ...
  76.  
  77. Filename:       The actual name of the file on disk
  78. Blank Space:    For your use...
  79. Size:           Size of file in bytes
  80. F:              Midi Format 0, 1, or 2
  81.                 0 = single track
  82.                 1 = multiple instruments on multiple tracks
  83.                 2 = multiple songs on multiple tracks
  84.                 W = Cakewalk WRK file (in future)
  85.                 - = I can't figure it out
  86. #T:             Number of tracks in file
  87. Time:           Estimate of length in minutes and seconds
  88. Midi Name:      Name of composition
  89.  
  90. The Midi Name is filled in less often than you might think... there's no
  91. standard "composition name" metaevent except for Sequence Name of Track 0,
  92. but many people don't use this, and just stick the composition name in as
  93. an instrument.  Since others just stick general commentary in as
  94. instruments, I couldn't come up with a reasonable rule for extracting the
  95. name from the instruments.  Sorry...
  96.  
  97. If there are any errors interpreting the file, you'll see a "** error" type
  98. comment where the Midi Name is.  In this case, ALNITLNG.MID is "** unknown
  99. type".  A quick look at ALNITLNG.MID reveals that it's a compressed file
  100. masquerading as a Midi file.  Shame!   Another one you might see is
  101. "** unknown MIDI status 123456:78".  The first number is the hexidecimal
  102. position in the file where the unknown status was found, the second number
  103. is the status in hex.  I've run several hundred MIDI files through, but
  104. you might have some that use statuses not in the MIDI 1.0 standard.
  105. MidiCat will try to find the next known status and keep going.
  106.  
  107.  
  108.  
  109.  
  110. III. INFORMATIONAL MODES
  111.  
  112. MidiCat keeps track of some other informational items as it cruises through
  113. the MIDI program.  You can choose which of this information you want to
  114. display, with information overload being your only real concern.  Just add
  115. some parameters to the command line:
  116.  
  117.      midicat -1234567?+* -t -di -h -v <filename> (<filename> ... )
  118.  
  119. The options can be stacked together in one parameter if you want, like
  120. "-+tdiv", they're just grouped by function here for convenience.
  121.  
  122.   -1234567?: Print text fields found
  123.       1 = Text Event (Text)      2 = Copyright (Copy)
  124.       3 = Seq/Track Name (Name)  4 = Instrument Name (Inst)
  125.       5 = Lyric (Lyri)           6 = Marker (Mark)
  126.       7 = Cue Point (Cue )       ? = Other unknown text (????)
  127.   -+: Equivalent to -12346
  128.   -*: Equivalent to -1234567?
  129.  
  130. The MIDI standard defines several Meta Events, and reserves 1-15 for
  131. different text events.  8 and up are undefined, but may be defined in the
  132. future, or used by your MIDI program, so you can use ? to see all the
  133. unrecognized text types.
  134.  
  135. Since I've found that people use fields 1, 2, 3, 4, and 6 for instruments
  136. and/or comments without rhyme or reason, they're probably the most
  137. interesting from an overview perspective  so the "+" option is the same as
  138. "12346".  MidiCat will print any text events one per line.
  139.  
  140.  
  141.   -t: Print time from start of track for text events
  142.  
  143. MidiCat tries to keep track of the time as it goes through the midi file -
  144. when it prints one of the text fields above, it'll add the time to it if
  145. you use this option.
  146.  
  147.  
  148.   -h: Don't print MIDI info header
  149.  
  150. This turns off the "Filename..." and "-----" printing, in case you don't
  151. need another set of headers.
  152.  
  153.  
  154.   -v: Only print info for valid MIDI files
  155.  
  156. If you use this, MidiCat won't print anything for files that it can't
  157. recognize as MIDI files.
  158.  
  159.  
  160.   -d: Keep track of drums.  Only valid for General MIDI.
  161.   -i: Keep track of instruments.  Only valid for General MIDI.
  162.  
  163. See INSTUMENT ANALYSIS below.
  164.  
  165.  
  166. If I do a "midicat -*t action4.mid" I get the following:
  167.  
  168. Filename                     Size F #T  Time Midi Name
  169. ----------------------------------------------------------------------------
  170. ACTION4  MID               36,635 1 15  1:26 
  171.    0:00  0 Copy: Copyright (C) 1992 by Voyetra Technologies
  172.    0:00  1 Name: Copyright (C) 1992  
  173.    0:00  2 Name: Voyetra Technologies
  174.    0:00  3 Name: B Melody            
  175.    0:00  4 Name: B Bass              
  176.    0:00  5 Name: B Melody 2          
  177.    0:00  6 Name: B Drums             
  178.    0:00  7 Name: X Rhythm Synth      
  179.    0:00  8 Name: X Bass 1            
  180.    0:00  9 Name: X Bass 2            
  181.    0:00 10 Name: X Melody 1          
  182.    0:00 11 Name: X Melody 2          
  183.    0:00 12 Name: X Hi-Hat            
  184.    0:00 13 Name: X Bass Drum         
  185.    0:00 14 Name: X Snare Drum
  186.  
  187. The numbers on the left are the times, the next numbers are the track
  188. numbers. You can see there are 15 tracks, numbered 0 through 14, though
  189. only 3-14 appear to have instrument tracks.  Next is a 4-character event
  190. code:
  191.  
  192.   Text: Text Event              Copy: Copyright
  193.   Name: Seq/Track Name          Inst: Instrument Name
  194.   Lyri: Lyric                   Mark: Marker
  195.   Cue : Cue Point               ????: Other marker
  196.  
  197. Following that is the actual text contained in the file.  They used the
  198. Copyright event, but also included it as 2 sequence names. They didn't
  199. bother to give it a name. All the sequence names come right at the starts
  200. of the tracks.  This is a fairly typical display, although it's more tracks
  201. than normal.
  202.  
  203.  
  204.  
  205.  
  206.  
  207. IV. INSTRUMENT ANALYSIS
  208.  
  209. MidiCat has two instrument analysis modes.  -i watches all the MIDI Program
  210. Change messages as they go by and reports them.  Usually this will be done
  211. only once or maybe twice a track.  -d watches all the MIDI Note On messages
  212. for a Note being sent to channel 10, the percussion channel.
  213.  
  214. MidiCat assumes that the MIDI file is a General MIDI file.  General MIDI
  215. defines a specific set of instruments and drums, so that if you do a
  216. program change to 110, you can guarantee that you're getting a bagpipe
  217. sound.  It also specifies that channel 10 is percussion, and which
  218. instrument goes with each note. 52 (Eb3), for instance, is a Ride Cymbal.
  219.  
  220. If the MIDI file wasn't written for General MIDI, you can't guarantee that
  221. the instrument getting played is the instrument the composer intended, so
  222. things sound weird.  For example, the Roland MT-32 has a different set
  223. of patches, so a file composed for that won't sound right on a General MIDI
  224. instrument.   There's nothing in a MIDI file that tells you whether it's
  225. General MIDI or not.
  226.  
  227. MidiCat can help here.  It can show you all the program changes.  If the
  228. instrument names the composer used match with the instruments you're
  229. seeing, it's probably a General MIDI file.  If not, you'll have to reassign
  230. the instruments for your General MIDI device.  Here's an example:
  231.  
  232. D:\MIDI> midicat -*ti dasboot.mid
  233.  
  234. Filename                     Size F #T  Time Midi Name
  235. ----------------------------------------------------------------------------
  236. DASBOOT  MID               50,191 1  9 11:11 
  237.    0:00  1 Text: Strings
  238.    0:01  1 Midi    Channel  1 set String Ensemble 1
  239.    0:00  2 Text: OrchesHit
  240.    0:01  2 Midi    Channel  2 set Orchestra Hit
  241.    0:00  3 Text: Brass
  242.    0:01  3 Midi    Channel  3 set SynthBrass 1
  243.    0:00  4 Text: Bimmel
  244.    0:01  4 Midi    Channel  4 set Glockenspiel
  245.    0:00  5 Text: Echolot
  246.    0:01  5 Midi    Channel  5 set FX 3 (crystal)
  247.    0:00  6 Text: Bass2
  248.    0:01  6 Midi    Channel  6 set Synth Bass 2
  249.    0:00  7 Text: Bass
  250.    0:01  7 Midi    Channel  7 set Synth Bass 1
  251.    0:00  8 Text: Drums
  252.    0:01  8 Midi    Channel 10 set Standard Drum Set
  253.  
  254. This looks pretty good...  the "Midi" lines tell you the which MIDI channel
  255. was changed to what instrument.  Comparing them with the "Text" events the
  256. composer entered, you can see we're pretty well matched.  This MIDI file
  257. should play well on a General MIDI device.
  258.  
  259.  
  260. Here's another one (I'm deleting some unnecessary lines for brevity):
  261.  
  262. D:\MIDI> midicat -*ti danube.mid
  263.  
  264. Filename                     Size F #T  Time Midi Name
  265. ----------------------------------------------------------------------------
  266. DANUBE   MID               19,041 1 34  2:17 
  267.    0:00  2 Name: for Voyetra's       
  268.    0:00  3 Name: Sequencer Plus ver.4
  269.    0:00  5 Name: 1st Violin          
  270.    0:00  5 Midi    Channel  1 set Music Box
  271.    0:00  6 Name: Bass                
  272.    0:00  6 Midi    Channel  2 set Lead 2 (sawtooth)
  273.    0:00  7 Name: French Horn         
  274.    0:00  7 Midi    Channel  3 set Percussive Organ
  275.    0:00  8 Name: 1st Piano           
  276.    0:00  8 Midi    Channel  4 set FX 8 (sci-fi)
  277.    0:00  9 Name: 2nd Violin          
  278.    0:00  9 Midi    Channel  5 set Baritone Sax
  279.    0:00 10 Name: Cello               
  280.    0:00 10 Midi    Channel  6 set Vibraphone
  281.    0:00 11 Name: 2nd Cello           
  282.    0:00 11 Midi    Channel  7 set Vibraphone
  283.    0:00 12 Name: Flute               
  284.    0:00 12 Midi    Channel  8 set Reed Organ
  285.    0:00 13 Name: Trumpet             
  286.    0:00 13 Midi    Channel  9 set Dulcimer
  287.    0:00 14 Name: 3rd Violin          
  288.    0:00 14 Midi    Channel 10 set Unknown Drum Set
  289.  
  290. Obviously, this isn't going to play very well...  A Percussive Organ is
  291. nothing like a French Horn.  This one will need hand conversion, unless you
  292. have a "Voyetra to General MIDI" converter of some sort.
  293.  
  294. Sometimes the composer doesn't put ANY useful text information in the MIDI
  295. file.  In this case, MidiCat can give tell you what instruments are on what
  296. tracks.
  297.  
  298.  
  299.  
  300. V. DRUM ANALYSIS
  301.  
  302. MidiCat also watches for General MIDI drum events.  Since each note is a
  303. different instrument, it wouldn't be reasonable to list every one as it's
  304. found in the file.  Instead, it keeps track of each event as it happens,
  305. then lists them all after everything else.
  306.  
  307. It _does_ keep track of drum channel program changes.  There is really no
  308. standard for this, so I'm using the drum set table from my Roland SC-7.
  309.  
  310.         Program Change #    UsedCode    Drum Set
  311.         ----------------------------------------------------
  312.         0x00 - 0x0F             S       Standard Drum Set
  313.         0x10 - 0x17             P       Power Drum Set
  314.         0x18, 0x1A-0x27         E       Electric Drum Set
  315.         0x19                    T       TR-808 Drum Set
  316.         0x28-0x2F               B       Brush Percussion Set
  317.         0x30-0x37               O       Orchestra Percussion Set
  318.         other                   S       Unknown
  319.  
  320. You'll see these as they occur in the tracks, like this:
  321.  
  322.    0:00  8 Text: Drums
  323.    0:01  8 Midi    Channel 10 set Standard Drum Set
  324.  
  325. Don't panic if you see Unknown Drum Set, your MIDI device/program will
  326. probably just use the Standard set anyway.
  327.  
  328. Once all the other information is listed, the used drums will be shown:
  329.  
  330. D:\MIDI> midicat -*d eleanor2.mid
  331.  
  332. Filename                     Size F #T  Time Midi Name
  333. ----------------------------------------------------------------------------
  334. ELEANOR2 MID               65,725 1 10  6:15 
  335.    1 Name: bass | eleanor rigby
  336.    2 Name: bass | eleanor rigby
  337.    3 Name: brite celeste | lead
  338.    4 Name: brite celeste | lead
  339.    5 Name: chords
  340.    6 Name: chords
  341.    7 Name: drums | retrograde
  342.    8 Name: drums
  343.    9 Name: POP1 rhythm
  344.  Drums Used (General Midi):
  345.   S35:Ac. Bass [Kick 2]    S36:Bass Drum 1 [Kick 1] S38:Ac. Snare [Snare 1]
  346.   S39:Hand Clap            S42:Closed Hi-Hat        S43:Hi Floor Tom [Lo 1]
  347.   S46:Open Hi-Hat          S47:Lo-Mid Tom [Mid 1]   S48:Hi-Mid Tom [Hi 2]
  348.   S49:Crash Cymbal 1       S51:Ride Cymbal 1        S69:Cabasa
  349.  
  350. Here we can see that all the drums used are from the standard set, because
  351. of the "S" prefix. The [bracket] names are the Roland versions of the
  352. names.  Since there are so many of them out there, I decided to show both.
  353. Drum "note" 47, for instance, is called Lo-Mid Tom by some General MIDI
  354. docs, but Mid Tom 1 by the Roland SC-7 General MIDI device.  Oh well.
  355.  
  356. This feature isn't as generally useful as the Instrument Analysis, but can
  357. be interesting.
  358.  
  359.